/**
 * @作者 钟先崟
 * @时间 2023-01-19 13:51
 * @功能 11. 盛最多水的容器
 * 给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
 * <p>
 * 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 * <p>
 * 返回容器可以储存的最大水量。
 * <p>
 * 说明：你不能倾斜容器。
 */
public class Solution
{
    public static void main(String[] args)
    {
//        System.out.println(maxArea(new int[]{1, 8, 6, 2, 5, 4, 8, 3, 7}));
//        System.out.println(maxArea(new int[]{1, 1}));
//        System.out.println(maxArea(new int[]{2, 0}));
        System.out.println(maxArea(new int[]{2,3,4,5,18,17,6}));
    }

    /**
     * 执行用时：
     * 2 ms
     * , 在所有 Java 提交中击败了
     * 96.12%
     * 的用户
     * 内存消耗：
     * 51.4 MB
     * , 在所有 Java 提交中击败了
     * 70.79%
     * 的用户
     * 通过测试用例：
     * 61 / 61
     * @param height
     * @return
     */
    public static int maxArea(int[] height)
    {
        int high = 1;
        int left = 0, right = height.length - 1;
        int Area = 0;
        while (left != right)
        {
            if (height[left] >= high)
            {
                if (height[right] >= high)
                {
                    if (Area <= high * (right - left))
                    {
                        Area = high * (right - left);
                    }
                    high++;
                } else
                {
                    right--;
                }
            } else
            {
                left++;
            }
        }
        return Area;
    }
}
